#include<iostream>
#include<thread>
#include"util.hpp"
#include"log.hpp"
#include"config.hpp"
#include"data.hpp"
#include"hot.hpp"
#include"server.hpp"

void FileUtilTest(const std::string& filename)
{
    Cloud::FileUtil fu(filename);
    std::cout << "size: " << fu.FileSize() << std::endl;
    std::cout << "lastmodtime: " << fu.LastModTime() << std::endl;
    std::cout << "lastacctime: " << fu.LastAccTime() << std::endl;
    std::cout << "name: " << fu.FileName() << std::endl;




    // Cloud::FileUtil fu(filename);
    // std::string body;
    // fu.GetContent(&body);

    // cloud::FileUtil nfu("./hello.txt");
    // nfu.SetContent(body);




    // std::string packname = filename + ".lz";
    // cloud::FileUtil fu(filename);
    // fu.Compress(packname);

    // cloud::FileUtil pfu(packname);
    // pfu.UnCompress("./hello.txt");



    // cloud::FileUtil fu(filename);
    // fu.CreateDirectory();
    // std::vector<std::string> arry;
    // fu.ScanDirectory(&arry);
    // for(auto& a : arry)
    // {
    //     std::cout << a << std::endl;
    // }
}

// void JsonUtilTest()
// {
//     const char* name = "小米";
//     int age = 10;
//     float scores[] = {85,88,5,89};
//     Json::Value root;
//     root["姓名"] = name;
//     root["年龄"] = age;
//     for(int i=0; i<sizeof(scores)/sizeof(int); i++)
//     {
//         root["成绩"].append(scores[i]);
//     }

//     std::string str;
//     //JsonUtil::Serialize(root,&str);
//     Cloud::JsonUtil::Serialize(root,&str);
//     std::cout << str << std::endl;

//     //反序列化
//     Json::Value val;
//     //JsonUtil::UnSerialize(str,&val);
//     Cloud::JsonUtil::UnSerialize(str,&val);
//     std::cout << val["姓名"].asString() << std::endl;
//     std::cout << val["年龄"].asInt() << std::endl;
//     for(int i=0; i<val["成绩"].size(); i++)
//     {
//         std::cout << val["成绩"][i].asFloat() << std::endl;
//     }
// }




// void ConfigTest()
// {
//     cloud::Config* config = cloud::Config::GetInstance();
//     std::cout << config->GetHotTime() << std::endl;
//     std::cout << confid->GetServerPort() << std::endl;
//     std::cout << config->GetServerPort() << std::endl;
//     std::cout << config->GetDownloadPrefix() << std::endl;
//     std::cout << config->GetPackFileSuffix() << std::endl;
//     std::cout << confid->GetPackDir() << std::endl;
//     std::cout << confid->GetBackDir() << std::endl;
//     std::cout << confid->GetBackupFile() << std::endl;
// }




// void DataText(const std::string& filename)
// {
//     // cloud::BackupInfo info;
//     // info.NewBackupInfo(filename);
//     // std::cout << info.pack_flag << std::endl;
//     // std::cout << info.fsize << std::endl;
//     // std::cout << info.mtime << std::endl;
//     // std::cout << info.atime << std::endl;
//     // std::cout << info.real_path << std::endl;
//     // std::cout << info.pack_path << std::endl;
//     // std::cout << info.url << std::endl;

//     cloud::BackupInfo info;
//     info.NewBackupInfo(filename);
//     cloud::DataManager data;
//      std::cout << "----------Insert--------------" << std::endl;
//     data.Insert(info);

//     cloud::BackupInfo tmp;

//     std::cout << "----------GetOneByURL----------" << std::endl;
//     data.GetOneByURL("/download.bundle.h",&tmp);
//     std::cout << tmp.pack_flag << std::endl;
//     std::cout << tmp.fsize << std::endl;
//     std::cout << tmp.mtime << std::endl;
//     std::cout << tmp.atime << std::endl;
//     std::cout << tmp.real_path << std::endl;
//     std::cout << tmp.pack_path << std::endl;
//     std::cout << tmp.url << std::endl;
//     std::cout << "----------Updata and GetAll----------" << std::endl;
//     info.pack_flag = true;
//     data.Update(info);
//     std::vector<cloud::BackupInfo> arry;
//     data.GetAll(&arry);
//     for(auto& a : arry)
//     {
//         std::cout << a.pack_flag << std::endl;
//         std::cout << a.fsize << std::endl;
//         std::cout << a.mtime << std::endl;
//         std::cout << a.atime << std::endl;
//         std::cout << a.real_path << std::endl;
//         std::cout << a.pack_path << std::endl;
//         std::cout << a.url << std::endl;
//     }

//     std::cout << "----------GetOneByRealPath----------" << std::endl;
//     //根据实际路径查询
//     data.GetOneByRealPath(filename,&tmp);
//     std::cout << tmp.pack_flag << std::endl;
//     std::cout << tmp.fsize << std::endl;
//     std::cout << tmp.mtime << std::endl;
//     std::cout << tmp.atime << std::endl;
//     std::cout << tmp.real_path << std::endl;
//     std::cout << tmp.pack_path << std::endl;
//     std::cout << tmp.url << std::endl;

// } 





// cloud::DataManager* _data;
// void HotTest()
// {
//     _data = new cloud::DataManager();
//     cloud::HotManager hot;
//     hot.RunModule();
// }


// void DataText(const std::string& filename)
// {
//     cloud::DataManager data;
// 	std::vector<cloud::BackupInfo> arry;
// 	data.GetAll(&arry);
// 	for (auto &a : arry)
//     {
// 		std::cout << a.pack_flag << std::endl;
// 		std::cout << a.fsize<< std::endl;
// 		std::cout << a.mtime<< std::endl;
// 		std::cout << a.atime<< std::endl;
// 		std::cout << a.real_path << std::endl;
// 		std::cout << a.pack_path<< std::endl;
// 		std::cout << a.url<< std::endl;
// 	}
// }

 


// cloud::DataManager* _data;
// void ServiceTest()
// {
//     cloud::Service srv;
//     srv.RunModule();
// }

int main(int argc,char* argv[])
{
    if(argc != 2)
    {
        std::cout << "使用方法: ./cloud + 文件路径和名称" << std::endl;
    }

    FileUtilTest(argv[1]);

    //JsonUtilTest();
    
    //ConfigTest();
    
    //DataText(argv[1]);
    
    //HotTest();
    
    //ServerTest();

    // std::thread thread_hot_manager(HotTest);
    // std::thread thread_service(ServiceTest);
    // thread_hot_manager.join();
    // thread_service.join();
    return 0;
}
